home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Oberon⁄F™ 1.1 / Mac / Mod / MemoryMgr (.txt) < prev    next >
Encoding:
Oberon Document  |  1995-06-15  |  13.8 KB  |  334 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Geneva
  16. Geneva
  17. StdStamps.StdViewDesc
  18. Geneva
  19. Geneva
  20. MODULE MacMemoryMgr;
  21. (* cp 
  22.     IMPORT SYSTEM, MacTypes;
  23.     CONST
  24.         CODE = 1; NOSTKCHK = 4;
  25.         D0 = 0; A0 = 8; A1 = 9;
  26.         ApplLimit = 130H;
  27.         SysZone = 2A6H;
  28.         AppZone = 2AAH;
  29.         GZRootHnd = 328H;
  30.         MemTop = 108H;
  31.     TYPE
  32.         Ptr* = MacTypes.Ptr;
  33.         Handle* = MacTypes.Handle;
  34.         Size* = LONGINT;
  35.         Zone* = RECORD (MacTypes.Data)
  36.             bkLim*: Ptr;
  37.             purgePtr: Ptr;
  38.             hFstFree*: Ptr;
  39.             zcbFree*: LONGINT;
  40.             gzProc*: MacTypes.ProcPtr;
  41.             moreMast*: INTEGER;
  42.             flags: MacTypes.Set;
  43.             cntRel, maxRel, cntNRel, maxNRel, cntEmpty, cntHandles: INTEGER;
  44.             minCBFree: LONGINT;
  45.             purgeProc*: MacTypes.ProcPtr;
  46.             sparePtr, allocPtr: MacTypes.ProcPtr;
  47.             heapData*: INTEGER
  48.         END;
  49.         THz* = POINTER TO Zone;
  50.     VAR err*: INTEGER;
  51.     PROCEDURE [CODE] setApplBase 0A0H, 057H;
  52.     PROCEDURE [CODE] initZone 0A0H, 019H;
  53.     PROCEDURE [CODE] setApplLimit 0A0H, 02DH;
  54.     PROCEDURE [CODE] maxApplZone 0A0H, 063H;
  55.     PROCEDURE [CODE] moreMasters 0A0H, 036H;
  56.     PROCEDURE [CODE] getZone 0A1H, 01AH;
  57.     PROCEDURE [CODE] setZone 0A0H, 01BH;
  58.     PROCEDURE [CODE] newHandle 0A1H, 022H;
  59.     PROCEDURE [CODE] disposHandle 0A0H, 023H;
  60.     PROCEDURE [CODE] getHandleSize 0A0H, 025H;
  61.     PROCEDURE [CODE] setHandleSize 0A0H, 024H;
  62.     PROCEDURE [CODE] handleZone 0A1H, 026H;
  63.     PROCEDURE [CODE] recoverHandle 0A1H, 028H;
  64.     PROCEDURE [CODE] reallocHandle 0A0H, 027H;
  65.     PROCEDURE [CODE] newPtr 0A1H, 01EH;
  66.     PROCEDURE [CODE] newPtrClear 0A3H, 01EH;
  67.     PROCEDURE [CODE] disposPtr 0A0H, 01FH;
  68.     PROCEDURE [CODE] getPtrSize 0A0H, 021H;
  69.     PROCEDURE [CODE] setPtrSize 0A0H, 020H;
  70.     PROCEDURE [CODE] ptrZone 0A1H, 048H;
  71.     PROCEDURE [CODE] freeMem 0A0H, 01CH;
  72.     PROCEDURE [CODE] maxMem 0A1H, 01DH;
  73.     PROCEDURE [CODE] compactMem 0A0H, 04CH;
  74.     PROCEDURE [CODE] resrvMem 0A0H, 040H;
  75.     PROCEDURE [CODE] purgeMem 0A0H, 04DH;
  76.     PROCEDURE [CODE] emptyHandle 0A0H, 02BH;
  77.     PROCEDURE [CODE] hLock 0A0H, 029H;
  78.     PROCEDURE [CODE] hUnlock 0A0H, 02AH;
  79.     PROCEDURE [CODE] hPurge 0A0H, 049H;
  80.     PROCEDURE [CODE] hNoPurge 0A0H, 04AH;
  81.     PROCEDURE [CODE] setGrowZone 0A0H, 04BH;
  82.     PROCEDURE [CODE] blockMove 0A0H, 02EH;
  83.     PROCEDURE [CODE] moveHHi 0A0H, 064H;
  84.     PROCEDURE [CODE] handToHand 0A9H, 0E1H;
  85.     PROCEDURE [CODE] ptrToHand 0A9H, 0E3H;
  86.     PROCEDURE [CODE] ptrToXHand 0A9H, 0E2H;
  87.     PROCEDURE [CODE] handAndHand 0A9H, 0E4H;
  88.     PROCEDURE [CODE] ptrAndHand 0A9H, 0EFH;
  89.     PROCEDURE [CODE] maxBlock 0A0H, 061H;
  90.     PROCEDURE [CODE] purgeSpace 0A0H, 062H;
  91.     PROCEDURE [CODE] stackSpace 0A0H, 065H;
  92. YSTEM.GETREG(D0, res);
  93.         IF res >= 0 THEN
  94.             err := 0
  95.         ELSE
  96.             err := SHORT(res); res := 0
  97.         END;
  98.         RETURN res
  99.     END GetPtrSize;
  100.     PROCEDURE [NOSTKCHK] SetPtrSize* (p: Ptr; newSize: Size);
  101.     BEGIN
  102.         SYSTEM.PUTREG(A0, p);
  103.         SYSTEM.PUTREG(D0, newSize);
  104.         setPtrSize;
  105.         SYSTEM.GETREG(D0, err)
  106.     END SetPtrSize;
  107.     PROCEDURE [NOSTKCHK] PtrZone* (p: Ptr): THz;
  108.         VAR t: THz;
  109.     BEGIN
  110.         SYSTEM.PUTREG(A0, p);
  111.         ptrZone;
  112.         SYSTEM.GETREG(D0, err);
  113.         SYSTEM.GETREG(A0, t);
  114.         RETURN t
  115.     END PtrZone;
  116.     (** Freeing Space in the Heap **)
  117.     PROCEDURE [NOSTKCHK] FreeMem* (): LONGINT;
  118.         VAR size: Size;
  119.     BEGIN
  120.         freeMem;
  121.         err := 0;
  122.         SYSTEM.GETREG(D0, size);
  123.         RETURN size
  124.     END FreeMem;
  125.     PROCEDURE [NOSTKCHK] MaxMem* (VAR grow: Size): Size;
  126.         VAR size: Size;
  127.     BEGIN
  128.         maxMem;
  129.         err := 0;
  130.         SYSTEM.GETREG(A0, grow);
  131.         SYSTEM.GETREG(D0, size);
  132.         RETURN size
  133.     END MaxMem;
  134.     PROCEDURE [NOSTKCHK] CompactMem* (cbNeeded: Size): Size;
  135.         VAR size: Size;
  136.     BEGIN
  137.         SYSTEM.PUTREG(D0, cbNeeded);
  138.         compactMem;
  139.         err := 0;
  140.         SYSTEM.GETREG(D0, size);
  141.         RETURN size
  142.     END CompactMem;
  143.     PROCEDURE [NOSTKCHK] ResrvMem* (cbNeeded: Size);
  144.     BEGIN
  145.         SYSTEM.PUTREG(D0, cbNeeded);
  146.         resrvMem;
  147.         SYSTEM.GETREG(D0, err)
  148.     END ResrvMem;
  149.     PROCEDURE [NOSTKCHK] PurgeMem* (cbNeeded: Size);
  150.     BEGIN
  151.         SYSTEM.PUTREG(D0, cbNeeded);
  152.         purgeMem;
  153.         SYSTEM.GETREG(D0, err)
  154.     END PurgeMem;
  155.     PROCEDURE [NOSTKCHK] EmptyHandle* (h: Handle);
  156.     BEGIN
  157.         SYSTEM.PUTREG(A0, h);
  158.         emptyHandle;
  159.         SYSTEM.GETREG(D0, err)
  160.     END EmptyHandle;
  161.     (** Properties of Relocatable Blocks **)
  162.     PROCEDURE [NOSTKCHK] HLock* (h: Handle);
  163.     BEGIN
  164.         SYSTEM.PUTREG(A0, h);
  165.         hLock;
  166.         SYSTEM.GETREG(D0, err)
  167.     END HLock;
  168.     PROCEDURE [NOSTKCHK] HUnlock* (h: Handle);
  169.     BEGIN
  170.         SYSTEM.PUTREG(A0, h);
  171.         hUnlock;
  172.         SYSTEM.GETREG(D0, err)
  173.     END HUnlock;
  174.     PROCEDURE [NOSTKCHK] HPurge* (h: Handle);
  175.     BEGIN
  176.         SYSTEM.PUTREG(A0, h);
  177.         hPurge;
  178.         SYSTEM.GETREG(D0, err)
  179.     END HPurge;
  180.     PROCEDURE [NOSTKCHK] HNoPurge* (h: Handle);
  181.     BEGIN
  182.         SYSTEM.PUTREG(A0, h);
  183.         hNoPurge;
  184.         SYSTEM.GETREG(D0, err)
  185.     END HNoPurge;
  186.     (** Grow Zone Operations **)
  187.     PROCEDURE [NOSTKCHK] SetGrowZone* (growZone: MacTypes.ProcPtr);
  188.     BEGIN
  189.         SYSTEM.PUTREG(A0, growZone);
  190.         setGrowZone;
  191.         SYSTEM.GETREG(D0, err)
  192.     END SetGrowZone;
  193.     PROCEDURE [NOSTKCHK] GZSaveHnd* (): Handle;
  194.         VAR h: Handle;
  195.     BEGIN
  196.         SYSTEM.MOVE(GZRootHnd, SYSTEM.ADR(h), 4);
  197.         RETURN h
  198.     END GZSaveHnd;
  199.     (** Miscellaneous Operations **)
  200.     PROCEDURE [NOSTKCHK] BlockMove* (srcPtr, destPtr: Ptr; byteCount: Size);
  201.     BEGIN
  202.         SYSTEM.PUTREG(A0, srcPtr);
  203.         SYSTEM.PUTREG(A1, destPtr);
  204.         SYSTEM.PUTREG(D0, byteCount);
  205.         blockMove;
  206.         SYSTEM.GETREG(D0, err)
  207.     END BlockMove;
  208.     PROCEDURE [NOSTKCHK] TopMem* (): Ptr;
  209.         VAR p: Ptr;
  210.     BEGIN
  211.         SYSTEM.MOVE(MemTop, SYSTEM.ADR(p), 4);
  212.         RETURN p
  213.     END TopMem;
  214.     PROCEDURE [NOSTKCHK] MoveHHi* (h: MacTypes.Handle);
  215.     BEGIN
  216.         SYSTEM.PUTREG(A0, h);
  217.         moveHHi;
  218.         SYSTEM.GETREG(D0, err)
  219.     END MoveHHi;
  220.     PROCEDURE [NOSTKCHK] MemError* (): MacTypes.OSErr;
  221.     BEGIN
  222.         RETURN err 
  223.     END MemError;
  224.     (** Pointer and Handle Manipulation **)
  225.     PROCEDURE [NOSTKCHK] HandToHand* (VAR theHndl: Handle): INTEGER; 
  226.     BEGIN
  227.         SYSTEM.PUTREG(A0, theHndl);
  228.         handToHand;
  229.         SYSTEM.GETREG(D0, err);
  230.         SYSTEM.GETREG(A0, theHndl);
  231.         RETURN err
  232.     END HandToHand;
  233.     PROCEDURE [NOSTKCHK] PtrToHand* (srcPtr: Ptr; VAR dstHndl: Handle; size: LONGINT): INTEGER;
  234.     BEGIN
  235.         SYSTEM.PUTREG(A0, srcPtr);
  236.         SYSTEM.PUTREG(D0, size);
  237.         ptrToHand;
  238.         SYSTEM.GETREG(D0, err);
  239.         SYSTEM.GETREG(A0, dstHndl);
  240.         RETURN err
  241.     END PtrToHand;
  242.     PROCEDURE [NOSTKCHK] PtrToXHand* (srcPtr: Ptr; dstHndl: Handle; size: LONGINT): INTEGER;
  243.     BEGIN
  244.         SYSTEM.PUTREG(A0, srcPtr);
  245.         SYSTEM.PUTREG(A1, dstHndl);
  246.         SYSTEM.PUTREG(D0, size);
  247.         ptrToXHand;
  248.         SYSTEM.GETREG(D0, err);
  249.         RETURN err
  250.     END PtrToXHand;
  251.     PROCEDURE [NOSTKCHK] HandAndHand* (hand1, hand2: Handle): INTEGER;
  252.     BEGIN
  253.         SYSTEM.PUTREG(A0, hand1);
  254.         SYSTEM.PUTREG(A1, hand2);
  255.         handAndHand;
  256.         SYSTEM.GETREG(D0, err);
  257.         RETURN err
  258.     END HandAndHand;
  259.     PROCEDURE [NOSTKCHK] PtrAndHand* (pntr: Ptr; hndl: Handle; size: LONGINT): INTEGER;
  260.     BEGIN
  261.         SYSTEM.PUTREG(D0, size);
  262.         SYSTEM.PUTREG(A0, pntr);
  263.         SYSTEM.PUTREG(A1, hndl);
  264.         ptrAndHand;
  265.         SYSTEM.GETREG(D0, err);
  266.         RETURN err
  267.     END PtrAndHand;
  268.     (** **)
  269.     PROCEDURE [NOSTKCHK] MaxBlock* (): LONGINT;
  270.         VAR res: LONGINT;
  271.     BEGIN
  272.         maxBlock;
  273.         SYSTEM.GETREG(D0, res);
  274.         RETURN res
  275.     END MaxBlock;
  276.     PROCEDURE [NOSTKCHK] PurgeSpace* (VAR total, contig: LONGINT);
  277.     BEGIN
  278.         purgeSpace;
  279.         SYSTEM.GETREG(D0, total);
  280.         SYSTEM.GETREG(A0, contig)
  281.     END PurgeSpace;
  282.     PROCEDURE [NOSTKCHK] StackSpace* (): LONGINT;
  283.     BEGIN
  284.         stackSpace;
  285.         SYSTEM.GETREG(D0, err)
  286.     END StackSpace;
  287.     PROCEDURE [NOSTKCHK] NewEmptyHandle* (): Handle;
  288.         VAR h: Handle;
  289.     BEGIN
  290.         newEmptyHandle;
  291.         SYSTEM.GETREG(D0, err);
  292.         SYSTEM.GETREG(A0, h);
  293.         RETURN h
  294.     END NewEmptyHandle;
  295.     PROCEDURE [NOSTKCHK] HSetRBit* (h: Handle);
  296.     BEGIN
  297.         SYSTEM.PUTREG(A0, h);
  298.         hSetRBit;
  299.         SYSTEM.GETREG(D0, err)
  300.     END HSetRBit;
  301.     PROCEDURE [NOSTKCHK] HClrRBit* (h: Handle);
  302.     BEGIN
  303.         SYSTEM.PUTREG(A0, h);
  304.         hClrRBit;
  305.         SYSTEM.GETREG(D0, err)
  306.     END HClrRBit;
  307.     PROCEDURE [NOSTKCHK] HGetState* (h: Handle): MacTypes.Set;
  308.         VAR s: MacTypes.Set;
  309.     BEGIN
  310.         SYSTEM.PUTREG(A0, h);
  311.         hGetState;
  312.         SYSTEM.GETREG(D0, s);
  313.         RETURN s
  314.     END HGetState;
  315.     PROCEDURE [NOSTKCHK] HSetState* (h: Handle; flags: MacTypes.Set);
  316.     BEGIN
  317.         SYSTEM.PUTREG(A0, h);
  318.         SYSTEM.PUTREG(D0, flags);
  319.         hSetState;
  320.         SYSTEM.GETREG(D0, err)
  321.     END HSetState;
  322. END MacMemoryMgr.
  323. TextControllers.StdCtrlDesc
  324. TextControllers.ControllerDesc
  325. Containers.ControllerDesc
  326. Controllers.ControllerDesc
  327. TextRulers.StdRulerDesc
  328. TextRulers.RulerDesc
  329. TextRulers.StdStyleDesc
  330. TextRulers.StyleDesc
  331. TextRulers.AttributesDesc
  332. Geneva
  333. Documents.ControllerDesc
  334.